#pragma once

#include <vex/functional/make_raw_delegate.h>
#include <vex/core/unique_ptr_support.h>
#include <memory>

namespace vex { namespace functional { namespace not_yet_usable {
    template<class TSignature, class TFunction>
    auto make_unique_delegate(TFunction&& p_func)
        -> std::unique_ptr<contract::delegate<TSignature>, core::unique_delete>
    {
        return std::unique_ptr<contract::delegate<TSignature>, core::unique_delete(
            make_raw_delegate<TSignature>(std::forward<TFunction>(p_func)));
    }
}}}